<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>逻辑分析</title>
  </head>
  <body>
    <button id="btn">点击开始猜数</button>
    <script>
      // 1.求第二十位的斐波那契数
      // 1,1,2,3,5,8...67675
      /*
              1.定义两个参数
                n2 = n1+n2
                n1 = n2-n1
                求第n个
              */
      // function fn(n) {
      //   var n1 = 1,
      //     n2 = 1;
      //   for (var i = 2; i < n; i++) {
      //     n2 = n1 + n2;
      //     n1 = n2 - n1;
      //   }
      //   console.log(n2);
      // }
      // fn(2)
      /*
             2.定三个参数 a,b,r=0
                第一个赋值第二个，第二个赋值第三个
                r = a+b
                a = b
                b = r
                循环 n 次
             */
      // function fn(n) {
      //   var n1 = 1,
      //     n2 = 1,
      //     r = 0;
      //   if (n <= 2) {
      //     return 1;
      //   }
      //   for (i = 3; i <= n; i++) {
      //     r = n1 + n2;
      //     n1 = n2;
      //     n2 = r;
      //   }
      //   return r;
      // }
      // console.log(fn(1));
      // console.log(fn(20));

      /*
            3.关系式:a3 = a2+a1
                三元表达 n<=2? 1 : di(n-1)+di(n-2)
                递归
                fn(n) {f(n-1)+f(n-2)}
            */
      function fn1(n) {
        return n <= 2 ? 1 : fn1(n - 1) + fn1(n - 2);
      }
      console.log(fn1(2));
      console.log(fn1(20));

      /*
                4.用数组的方法
                定义数组，求数组第20位
                */
      //  function fn(n) {
      //   var arr = [1,1]
      //   for(var i=0;i<n;i++) {
      //     arr[i+2] = arr[i]+arr[i+1]
      //   }
      //   return arr[i-1]
      //  }
      //  console.log(fn(20));

      // console.log("====给定一个年份、月份，判断该月多少天=====");
      /*
              switch
              三种情况
              4，6，9，11 ==30
              2 == 28：29
              default == 31
              */
      function fn2(year, month) {
        switch (month) {
          case 4:
          case 6:
          case 9:
          case 11:
            console.log("30天");
            break;
          case 2:
            (year % 4 == 0) & (year % 100 != 0) || year % 400 == 0
              ? console.log("29天")
              : console.log("28天");
            break;
          default:
            console.log("31天");
        }
      }
      fn2(2022, 2);

      // console.log("=====求现在距离2023年01-01还有多少天===");
      var t1 = new Date("2023/11/11 0:0:0");
      var t2 = new Date();
      var dt = Math.abs(t1 - t2);
      var day = Math.floor(dt / 1000 / 3600 / 24);
      var day = Math.floor((dt / 1000 / 3600) % 24);
      var Minutes = Math.floor((dt / 1000 / 60) % 60);
      var Seconds = Math.floor((dt / 1000) % 60);
      var res = `距离下个双十一还有${day}天${day}时${Minutes}分${Seconds}秒`;
      console.log(res);

      // console.log("=====求100-999的水仙花数===");
      // /*
      // 逻辑1：
      // 1.遍历100-900的所有数 i
      // 2.数转字符串再分隔成数组
      // 3.每个字符串立方和
      // 4.判断立方和==遍历的i
      // 5.如果==，放进新的数组 (新数组再遍历前var)
      // */
      var res = 0;
      var newArr = [];
      for (var i = 100; i <= 999; i++) {
        var arr = String(i).split("");
        // console.log(res);
        for (var j = 0; j < arr.length; j++) {
          res += arr[j] ** 3;
        }
        if (i == res) {
          newArr.push(res);
        }
        res = 0;
      }
      console.log(newArr);

      // /*
      // 逻辑2：
      // 1.定义个十百三个参数
      // 2.遍历100-999的数 i
      // 3.i分别取余得个十百，并赋值
      // 4.判断：个十百的立方和 == i
      // 4.是，就push新数组
      // */
      // var newArr = [];
      // var g = 0,
      //   s = 0,
      //   b = 0; //153
      // for (var i = 100; i <= 999; i++) {
      //   g = i % 10;
      //   s = parseInt((i / 10) % 10);
      //   b = parseInt(i / 100);
      //   if (g ** 3 + s ** 3 + b ** 3 == i) {
      //     newArr.push(i);
      //   }
      // }
      // console.log(newArr);

      // console.log("==========抽数组概率========");
      // 5、数组a由1～20个数字组成，每个数字为4个，总共80个元素
      // 随机取出15个元素组成新的数组b，编写一个函数对b进行处理，如果b满足每个数字为3个
      // 如：[1,1,1,2,2,2,3,3,3,4,4,4,11,11,11]则返回true，否则返回false
      // var a = [1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, 19, 19, 19, 19, 20, 20, 20, 20];
      // 获取随机数： var randomNum = Math.floor(Math.random() * 80)
      // Object.values(对象):得到一个包含对象自身所有可枚举属性值的数组

      /*
                1.定义0-80的随机数
                2.遍历数组，并抽取15位数放进新数组b
                3.统计数组b里面的项出现的次数
                4.将统计出的次数重新放回一个数组中
                5. 通过every方法判断是否出现的次数都为3次，
                    返回的Boolean 赋值给flag
                */
      // var b = [];
      // var flag;
      // for (var i = 0; i < 15; i++) {
      //   var randomNum = Math.floor(Math.random() * 80);
      //   b.push(a[randomNum]);
      // }
      // //  var b = [1,1,1,2,2,2,3,3,3,4,4,4,11,11,11];
      // var obj = b.reduce(function (prev, item) {
      //   prev[item] = prev[item] + 1 || 1;
      //   return prev;
      // }, {});
      // console.log(obj);
      // 获取对象键值的方法(遍历对象)
      // var temArr = []
      // for(var k in obj) {
      //   temArr.push(obj[k])
      // }
      // console.log(temArr);
      // flag = temArr.every(function(item){
      //   return item==3
      // })
      // console.log(flag);

      // 另一种简写

      // 另一种获取对象键值的方法
      // var objArr = Object.values(obj);
      // // console.log(objArr);
      // flag =  objArr.every(function(item){
      //   return item==3
      // })
      // console.log(flag);

      //   // 完整的简写
      function fn5() {
        // var flag
        var a = [
          1,
          1,
          1,
          1,
          2,
          2,
          2,
          2,
          3,
          3,
          3,
          3,
          4,
          4,
          4,
          4,
          5,
          5,
          5,
          5,
          6,
          6,
          6,
          6,
          7,
          7,
          7,
          7,
          8,
          8,
          8,
          8,
          9,
          9,
          9,
          9,
          10,
          10,
          10,
          10,
          11,
          11,
          11,
          11,
          12,
          12,
          12,
          12,
          13,
          13,
          13,
          13,
          14,
          14,
          14,
          14,
          15,
          15,
          15,
          15,
          16,
          16,
          16,
          16,
          17,
          17,
          17,
          17,
          18,
          18,
          18,
          18,
          19,
          19,
          19,
          19,
          20,
          20,
          20,
          20,
        ];
        var b = [];
        for (var i = 0; i < 15; i++) {
          var random = Math.floor(Math.random() * 80);
          b.push(a[random]);
        }
        // console.log(b);
        var obj = b.reduce(function (prev, item) {
          prev[item] = prev[item] + 1 || 1;
          return prev;
        }, {});
        console.log(obj);
        return Object.values(obj).every(function (item) {
          return item == 3;
        });
      }
      console.log(fn5());

      // console.log("==========使用函数做一个猜数字游戏=========");
      /* 
      1.定义1-10随机数
      2.弹窗输入数字 n
      3.遍历
      4.判断猜的数与随机数
      5.猜对了 return
      6.没猜对，再次弹窗
      */
      function fn6() {
        var n = prompt("猜一个数：");
        var random = Math.floor(Math.random() * 10 + 1);
        for (var i = 0; i < 10; i++) {
          if (n > random) {
            alert("猜大了");
          } else if (n < random) {
            alert("猜小了");
          } else {
            return alert("猜对了！");
          }
          n = prompt("再猜：");
        }
      }
      btn.onclick = function () {
        fn6();
      };
    </script>
  </body>
</html>
